Modern GPUs and CPUs are massively parallel, many-core processors. The current practice of many-core programming based on OpenCL, CUDA, and OpenMP puts strain on software development, testing and support teams. The growing performance difference between parallel and sequential execution will motivate an increasing number of developers to parallelize their applications. Today, an application programmer has to understand the desirable parallel programming idioms, manually work around potential hardware performance pitfalls, and restructure their application design in order to achieve their performance objectives on many-core processors. In this presentation, I will discuss why higher-level programming models have not found traction with the developer communities, what the industry is doing today to try to address the challenges, and how the academic community can contribute to this exciting revolution.